package com.test.Encapsulation_Inheritance_Polymorphism;

public class ArtStudent extends Student{

    public boolean gender; //子类可以有和父类相同名称的成员变量

    public ArtStudent(String name, int age){
        super(name,age);  //super调用父类的构造方法
    }

    public void art(){  //艺术生自己的方法
        System.out.println("随手画个毕加索");
    }

    @Override  //注解提示这个是重写（覆写）方法
    public void study(){
        super.study();  //当我们在重写方法时，不仅想使用我们自己的逻辑，也想用父类的逻辑（调用父类方法）
        // 可以使用super关键字指代父类，super.后面自动提示父类的方法
        System.out.println("我不爱画画，爱唱歌");  //调用完父类的方法后，再执行自己的代码
    }

    /*
    同理，如果想访问父类的成员变量，也可以使用super关键字来访问。
    在方法中访问成员变量的优先级是 形参列表->当前类的成员变量->父类的成员变量，即不加关键字时，
    有形参的时候，方法里访问的是形参的变量，没有形参的时候，访问的是当前子类的成员变量，
    没有形参、当前子类也没有这个名字的成员变量时，访问的是父类的成员变量。
    上面讲的是没有使用关键字指定的情况，如果形参、当前类成员变量、父类成员变量都有，则可以使用this或super指定访问的是哪个变量
     */
    public void setTest(boolean gender) {

        this.gender = false;  //指定当前类的成员变量
        super.gender = true;  //指定父类的成员变量
        System.out.println(gender);
        System.out.println(this.gender);
        System.out.println(super.gender);  //只能super一次，不能super.super,只能往上访问一级
    }

}
